{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "这一版可以看作对之前的培训教程的补充，第一版内容在  https://github.com/zhulei227/ML_Skills   \n",
    "\n",
    "\n",
    "### 一.定义学习类型(分类/回归)\n",
    "首先，我们需要挖掘业务需求来定义我们的学习类型，大部分业务最终可以归结为分类或回归问题。比如：   \n",
    "1）预测用户的购车意愿？用户是否购买新车？  \n",
    "2）车险用户第二年的赔付金额？  \n",
    "3）车险用户骗保的可能性？   \n",
    "4）人脸刘海长度？    \n",
    "5）茅台明天的股价？创业板指数明天会涨还是跌？  \n",
    "6）用户行为轨迹预测？  \n",
    "7）图片中人脸识别？  \n",
    "8）自动驾驶？  \n",
    "\n",
    "通过将任务进行划分，可以为我们选择合适的模型提供指导方向，另外需要注意输出值的取值范围。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 二.模型好坏的评估指标定义\n",
    "模型的好坏，我们需要一个量化标准，这通常涉及三类:  \n",
    "1）模型效果类，比如对于回归任务，有mse,rmse,mae...，对于分类任务有accuracy,precision,recall,f-score,...   \n",
    "2）系统效果类，比如预测耗时，io/cpu/内存利用率...   \n",
    "3）业务效果类，比如预测赔付率，保单/保费增长率，A/B测试指标...\n",
    "\n",
    "\n",
    "#### 第一步：选对指标\n",
    "\n",
    "对于1）中的指标比较常见的，变化不大，但需要合理选择，比如有某个模型预测用户是否会得新冠，如果使用accuracy指标做评估，我们的模型只需要预测所有人都不会得新冠，就能取得99.999%正确率，这样的指标完全没有价值，而选择precison/recall更好。\n",
    "\n",
    "####  第二步：构建唯一的指标\n",
    "\n",
    "对于众多的评估指标，如果同时考虑，模型好坏玩玩很难抉择，比如对于分类任务，同时考虑如下的两个指标：   \n",
    "\n",
    "||precision|recall|\n",
    "|---|---|---|\n",
    "|第1组|0.7|0.8|\n",
    "|第2组|0.8|0.7|\n",
    "|第3组|0.6|0.9|\n",
    "|第4组|1.0|0.5|\n",
    "|第5组|0.75|0.75|  \n",
    "\n",
    "请问那一组，最佳？（可以发现这俩指标加起来都是1.5），这时，我们可能需要更多的（业务）信息帮助判断。比如在理赔反欺诈场景下，对于我们预测为欺诈的案件，理赔部都需要花费人力成本去再次核查，如果现在理赔部只有10个核查人员，你会选择那一组指标？如果有1000个人呢？  \n",
    "\n",
    "#### 方法一：加权平均  \n",
    "\n",
    "比如：   \n",
    "\n",
    "$$\n",
    "f_{1}=\\frac{2}{\\frac{1}{precision}+\\frac{1}{recall}}=\\frac{2\\cdot precision \\cdot recall}{precision+recall}\n",
    "$$  \n",
    "\n",
    "$$\n",
    "f_{\\beta}=\\frac{(1+\\beta^2)\\cdot precision \\cdot recall}{\\beta^2*precision+recall}\n",
    "$$   \n",
    "\n",
    "#### 方法二：约束条件+唯一指标  \n",
    "\n",
    "比如下面例子，由于是线上项目，还要考虑预测耗时  \n",
    "\n",
    "||预测时间(ms)|f_score|\n",
    "|---|---|---|\n",
    "|第1组|150|0.8|\n",
    "|第2组|50|0.7|\n",
    "|第3组|1000|0.9|   \n",
    "\n",
    "如何选择？"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
